const express = require('express');
const cors = require('cors');
const Router = require('./api/index.js');
const sequelize = require('./db/index.js');
const expressJWT = require('express-jwt');

// 创建express实例
const app = express();

// 跨域,全局中间件
app.use(cors())

// 解析 json 格式的中间件
app.use(express.json())

// 解析表单数据的中间件
app.use(express.urlencoded({ extended: false }))

// 解析 token 的中间件
// 使用 .unless({ path: [/^\/api\//] }) 指定哪些接口不需要进行 Token 的身份认证
app.use(expressJWT({ secret: 'dupengwei' }).unless({ path: [/^\/api\//] }))

// 挂载路由
app.use('/api', Router)

// 错误中间件
app.use(function (err, req, res, next) {
  // 验证失败导致的错误
  // if (err instanceof joi.ValidationError) return res.send(err)
  // 捕获身份认证失败的错误
  if (err.name === 'UnauthorizedError') return res.send({ status: 1, message: '身份认证失败！' })

  // 未知错误...
  res.send(err)
})

app.listen(3007, function () {
  console.log('api server running at http://127.0.0.1:3007')
})

// 测试数据库连接
sequelize
  .authenticate()
  .then(() => {
    console.log('Database connection has been established successfully.');
  })
  .catch((err) => {
    console.error('Unable to connect to the database:', err);
  });


